iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Software Development

RISC-V: 深入淺出從入門到放棄系列 第 23

DAY23: RISC-V: IOMMU 對 VM MSI 的支援

  • 分享至 

  • xImage
  •  
tags: 鐵人賽

介紹

當系統中存在 IOMMU ,使運行中的 VM(virtual machine)的 guest os 可以直接控制 I/O 設備。IOMMU 負責將 guest 實體地址轉換成機器的實體地址。

為了處理從 guest OS 設備所發出的 MSI,IOMMU 必須能夠將這些 MSI 重新定位到 IMSIC 中的 guest interrupt file。

因為來自設備的 MSI 只是記憶體的寫入,所以它們也會受到 IOMMU 用於其他寫入記憶體的地址轉換,但是 AIA 要求 IOMMU 對 VM 中的 MSI 進行特殊處理,部份原因是為了簡化軟體,部份原因是為了支援 memory-resident interrupt file。

Device contexts at an IOMMU

對於系統中的 IOMMU 做出以下假設:

  • 透過 IOMMU 連接到系統的每個 I/O 設備,軟體可以在 IOMMU 上配置一個設備的 context,該 context 包含與設備指定的虛擬地址空間,以及 IOMMU 支援的設備參數,透過 IOMMU 為每個設備提供獨立的 context,可以為不同的 guest os 分配每個不同的設備。
  • IOMMU 也可以選擇性的透過軟體找到相對應的設備 context 地址轉換資料結構,來翻譯設備 access 記憶體的地址
    • 我的理解: 軟體可以利用設備的 context 地址,找到設備 access 記憶體的地址

AIA 需要在設備 context 中新增以下欄位:

  • MSI 地址 mask 以及 地址 patten: 這兩者用來辨別 guest 實體地址中, MSI 目的地的 page
  • MSI page table 的實際實體地址: 用來控制來自設備的 MSI 的轉換

MSI 地址 mask 以及地址 patten 都是無符號整數,寬度與 guest 實體 page number 相同,也就是 12 bit。

Translation of addresses for MSIs from devices

為了支援將 I/O 設備的 MSI 直接傳送到 VM,而無需 hypervisor 干涉,IOMMU 必須能夠將 MSI 的 guest 實體地址轉換為機器中的 IMSIC guest interrupt file 的實際實體地址,如下所示:

這種地址轉換由在 IOMMU 中的 設備 context 配置的 MSI page table 控制(也就是 MSI page table)。每個 interrupt file 都占用 4KB 地址空間,所需的地址轉換是從 virtual page address 到 physical page addres,與 RISC-V 地址轉換相同。
來自設備的 memory 寫入,會通過寫入的 target 地址來判別 MSI,如果 IOMMU 確定寫入的 MSI 是到相對應的 VM 中的 interrupt fule 位置,則該寫入被視為 VM 的 MSI。後面幾天會介紹如何判別寫入的 target 地址被判為 MSI 。


上一篇
DAY22: RISC-V:AIA 之 IPI(Interprocessor Interrupts)
下一篇
DAY24: RISC-V: Memory-resident interrupt file
系列文
RISC-V: 深入淺出從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言